/*
打印流 PrintStream
打印流其实我们一直在用，比如System.out.println(),就是一个打印流PrintStream
PrintStream继承自FilterOutputStream类，因此依然是装饰我们传入的输出流。但是它存在自动刷新机制，例如当向PrintStream流中写入一个字节数组后，自动调用flush()方法
PrintStream也永远不会抛出异常，而是使用内部检查机制checkError()方法进行错误检查。
最方便的是，它能够格式化任意的类型，将它们以字符串的形式写入到输出流。
 */
package javaio.PrintStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class Main {
    public static void main(String[] args) {
        //可以从PrintStream创建一个对象，这个对象就有了println，printf等方法
        try(PrintStream ps = new PrintStream(new FileOutputStream("output.txt"))){
            ps.println("好饿啊，买不到菜");  //打印到文件中，不再是默认的打印到控制台
            ps.printf("今天能买到才么？ %s","不能"); //也支持占位符，格式化打印，%s,%d等
        }catch (IOException e){
            e.printStackTrace();
        }
        //跟踪PrintStream，发现PrintStream也是继承自FilterOutputStream，装饰者模式
        /*
        我们平时使用的println方式就是PrintStream中的方法，它会直接打印基本数据类型或是调用对象的toString()方法得到一个字符串，
        并将字符串转换为字符，放入缓冲区再经过转换流输出到给定的输出流上。
        结合同级目录PrintStream图片理解
         */

        /*
        与此同时还有一个PrintWriter，后面新出的功能，不过他们的功能基本一致，PrintWriter的构造方法可以接受一个Writer作为参数。这里不再阐述了
         */
    }
}
